package com.course.model.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

/**
 * @PROJECT_NAME: course
 * @DESCRIPTION: 安全配置类
 * @Author: 涂玄武
 * @DATE: 2021/4/25 16:42
 */
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder(){
        return new BCryptPasswordEncoder();
    }

    /**
     * authorizeRequests：所有security全注解配置实现的开端，表示开始说明需要的权限
     * 需要的权限分为两部分，第一部分是拦截的路径，第二部分是访问该路径需要的权限
     * <p>
     * antMatchers  拦截的路径  permitAll()所有权限都可以，直接放行所有 hasAnyRole()这个方法可以指定角色
     * anyRequest任何请求	 authenticated需要认证后才能访问
     * <p>
     * .and().csrf().disable(); 固定写法   使csrf攻击失效，
     * 如果不设置为disabled，所有除了内部的请求，其余外部请求都被认为是在攻击我这个网站，全部拦截
     *
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .csrf().disable();
    }
}
